// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
// 导入mui样式
import './lib/mui/css/mui.min.css'
import mui from './lib/mui/js/mui.min.js'
// import './lib/mui/js/mui.js'
import './lib/mui/css/icons-extra.css'
import MintUI from 'mint-ui'
// 导入Mint-ui样式
import 'mint-ui/lib/style.css'
// 导入vuex数据
import store from './store'
import axios from 'axios'
import VueAxios from 'vue-axios'
import * as types from './store/mutation-types'
// 导入element样式
// import Element from 'element-ui'
// import 'element-ui/lib/theme-chalk/index.css'
// Vue.use(Element)
Vue.use(MintUI)
Vue.config.productionTip = false
// 使用插件注册使用axios
Vue.use(VueAxios, axios)
// 全局配置mui
Vue.prototype.$immui = mui
require('./assets/webim.config.js')
require('./assets/EMedia_x1v1.js')
let WebIM = require('easemob-websdk')
// let WebIM = require('./assets/webim.config.js')
// require('easemob-websdk')

Vue.prototype.$webim = WebIM
/* eslint-disable-next-line */
const conn = new WebIM.connection({
  // WebIMConfig
  isMultiLoginSessions: WebIM.config.isMultiLoginSessions,
  https: typeof WebIM.config.https === 'boolean' ? WebIM.config.https : location.protocol === 'https:',
  url: WebIM.config.xmppURL,
  heartBeatWait: WebIM.config.heartBeatWait,
  autoReconnectNumMax: WebIM.config.autoReconnectNumMax,
  autoReconnectInterval: WebIM.config.autoReconnectInterval,
  apiUrl: WebIM.config.apiURL,
  isAutoLogin: true
})
const options = {
  apiUrl: WebIM.config.apiURL,
  user: 'sjr1',
  pwd: 'sjr1',
  appKey: WebIM.config.appkey,
  success: function (re) {
    console.log('链接服务器正常')
  },
  error: function (err) {
    alert(err)
  }
}
var rtcCall = new WebIM.WebRTC.Call({
  connection: conn,
  mediaStreamConstaints: {
    audio: true,
    video: true
  },
  listener: {
    // 接收到语音或者视频通话
    onAcceptCall: function (from, options) {
        console.log('onAcceptCall::', 'from: ', from, 'options: ', options)
    },
    // 通过streamType区分视频流和音频流，streamType: 'VOICE'(音频流)，'VIDEO'(视频流)
    onGotRemoteStream: function (stream, streamType) {
        // console.log('onGotRemoteStream::', 'stream: ', stream, 'streamType: ', streamType)
        // var video = document.getElementById('video')
        // video.srcObject = stream
    },
    onGotLocalStream: function (stream, streamType) {
        // console.log('onGotLocalStream::', 'stream:', stream, 'streamType: ', streamType)
        // var video = document.getElementById('localVideo')
        // video.srcObject = stream
    },
    // 接受
    onRinging: function (caller) {
      mui.toast(caller)
      // caller 收到语音邀请，对方的ID
        console.log('onRinging::', 'caller:', caller)
        // this.receiveAudio = true
        // 当用户收到了其他好友的语音邀请时候，展示接受拒绝的界面
        store.commit(types.RESET_RECEIVE_AUDIO, true)
        store.commit(types.RESET_SHOW_REC, true)
    },
    //
    onTermCall: function (reason) {
        console.log('onTermCall::, 77777777777777777777777777777777777777')
        console.log('reason:', reason)
        if (reason === 'success') {
          // 说明连接成功，发送语音显示成功
          console.log('success连接成功')
        }
    },
    onIceConnectionStateChange: function (iceState) {
        console.log('onIceConnectionStateChange::', 'iceState:', iceState)
        // iceState new可以做忙线
        if (iceState === 'closed') {
          // mui.toast('')
          console.log('连接挂断')
          // 当连接挂断的时候 不展示接收到视频
          store.commit(types.RESET_RECEIVE_AUDIO, false)
          // 不展示发送语音时候弹出来的界面
          store.commit(types.RESET_SHOW_AUDIO, false)
          // 重置接收视频页面的active标志
          store.commit(types.RESET_SHOW_REC, true)
          // 不展示正在接听
          store.commit(types.RESET_SHOW_WAITING, true)
        } else if (iceState === 'completed') {
          console.log('发送语音连接成功')
        } else if (iceState === 'checking') {
          console.log('正在尝试的连接语音')
        } else if (iceState === 'connected') {
          console.log('connected连接成功')
          // 不展示正在接听
          store.commit(types.RESET_SHOW_WAITING, true)
        } else if (iceState === 'disconnected') {
          console.log('disconnected等待用户接听')
        }
    },
    onError: function (e) {
        console.log(e, '语音连接报错')
    }
 }
})
Vue.prototype.$imconn = conn
Vue.prototype.$imoption = options
Vue.prototype.$imrtccall = rtcCall
// 初始化全局的头像
Vue.prototype.$imHeadIcon = 'http://minichat.guozhengfeng.cn/defalt/headicon.jpg'
// 初始化全局的群头像
Vue.prototype.$imGroupIcon = 'http://minichat.guozhengfeng.cn/default/groupicon.jpg'
// 全局设置访问文件链接的头部
Vue.prototype.$imBasicFile = 'http://minichat.guozhengfeng.cn/'

/*
conn.listen({
  // 连接成功回调
  // onOpened: function (message) {
  //   console.log('登录成功的回调函数main', message)
  //   // 如果isAutoLogin设置为false，那么必须手动设置上线，否则无法收消息
  //   // 手动上线指的是调用conn.setPresence(); 如果conn初始化时已将isAutoLogin设置为true
  //   // 则无需调用conn.setPresence();
  // },
  // 连接关闭回调
  onClosed: function (message) {},
  // 收到文本消息
  onTextMessage: function (message) {},
  // 收到表情消息
  onEmojiMessage: function (message) {
    console.log(message, '收到的表情信息')
  },
  // 收到图片消息
  onPictureMessage: function (message) {
    console.log('message收到图片信息', message)
  },
  // 收到命令消息
  onCmdMessage: function (message) {},
  // 收到音频消息
  onAudioMessage: function (message) {},
  // 收到位置消息
  onLocationMessage: function (message) {},
  // 收到文件消息
  onFileMessage: function (message) {},
  // 视频消息
  onVideoMessage: function (message) {
    var node = document.getElementById('privateVideo')
    var option = {
      url: message.url,
      headers: {
        'Accept': 'audio/mp4'
      },
      onFileDownloadComplete: function (response) {
        var objectURL = this.$webim.utils.parseDownloadResponse.call(this.$imconn, response)
        node.src = objectURL
      },
      onFileDownloadError: function () {
        console.log('File down load error.')
      }
    }
    this.$webim.utils.download.call(this.$imconn, option)
  },
  // 收到视频消息
  // 处理“广播”或“发布-订阅”消息，如联系人订阅请求、处理群组、聊天室被踢解散等消息
  onPresence: function (message) {},
  // 处理好友申请
  onRoster: function (message) {},
  // 处理群组邀请
  onInviteMessage: function (message) {},
  // 本机网络连接成功
  onOnline: function () {},
  // 本机网络掉线
  onOffline: function () {},
  // 失败回调
  onError: function (message) {},
  // 黑名单变动
  onBlacklistUpdate: function (list) {
    console.log('查询黑名单，将好友拉黑，将好友从黑名单移除都会回调这个函数，list则是黑名单现有的所有好友信息', list)
  },
  // 收到消息送达服务器回执
  onReceivedMessage: function(message) {},
  // 收到消息送达客户端回执
  onDeliveredMessage: function(message) {},
  // 收到消息已读回执
  onReadMessage: function(message) {},
  // 创建群组成功回执（需调用createGroupNew）
  onCreateGroup: function(message) {},
  // 如果用户在A群组被禁言，在A群发消息会走这个回调并且消息不会传递给群其它成员
  onMutedMessage: function(message) {}
})
*/
// require('./public/webim/index')
/* eslint-disable */
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})
